﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;

namespace GestionaleLib.Controller
{
    public class ctrlFornitori
    {
        #region "Testata"
        private Connector Connessione;
        private List<Fornitore> Fornitori;
        public enum Insert
        {
            Successo,
            Errore
        }
        public enum Edit
        {
            Successo,
            Errore
        }
        public enum Delete
        {
            Successo,
            Errore
        }
        #endregion
        #region "Metodi"
        public ctrlFornitori()
        {
            Connessione = Connector.Istance();
            Fornitori = new List<Fornitore>();
        }

        //Nuovo Fornitore
        public Insert Nuovo(Fornitore Fornitori)
        {
            try
            {
                string sql = @"INSERT INTO Fornitori
                                    (Id,Nome,Cognome,Indirizzo,Citta,Cap,
                                        Telefono,Cellulare,Fax,Email,PartitaIva,CodiceFiscale,
                                        RagioneSociale,SedeLegale,SedeAmministrativa,Annotazioni)
                              VALUES
                                    (@Id,@Nome,@Cognome,@Indirizzo,@Citta,@Cap,@Telefono,
                                        @Cellulare,@Fax,@Email,@PartitaIva,@CodiceFiscale,
                                        @RagioneSociale,@SedeLegale,@SedeAmministrativa,
                                        @Annotazioni)";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Fornitori.Id);
                cmd.Parameters.AddWithValue("@Nome", Fornitori.Nome);
                cmd.Parameters.AddWithValue("@Cognome",Fornitori.Cognome);
                cmd.Parameters.AddWithValue("@Indirizzo", Fornitori.Indirizzo);
                cmd.Parameters.AddWithValue("@Citta", Fornitori.Citta);
                cmd.Parameters.AddWithValue("@Cap", Fornitori.Cap);
                cmd.Parameters.AddWithValue("@Telefono", Fornitori.Telefono);
                cmd.Parameters.AddWithValue("@Cellulare", Fornitori.Cellulare);
                cmd.Parameters.AddWithValue("@Fax", Fornitori.Fax);
                cmd.Parameters.AddWithValue("@Email", Fornitori.Email);
                cmd.Parameters.AddWithValue("@PartitaIva", Fornitori.PartitaIva);
                cmd.Parameters.AddWithValue("@CodiceFiscale", Fornitori.CodiceFiscale);
                cmd.Parameters.AddWithValue("@RagioneSociale", Fornitori.RagioneSociale);
                cmd.Parameters.AddWithValue("@SedeLegale", Fornitori.SedeLegale);
                cmd.Parameters.AddWithValue("@SedeAmministrativa", Fornitori.SedeAmministrativa);
                if (Fornitori.Annotazioni != null)
                {
                    cmd.Parameters.AddWithValue("@Annotazioni", Fornitori.Annotazioni);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@Annotazioni", "");
                }
                cmd.ExecuteNonQuery();
                return Insert.Successo;
            }
            catch 
            {
                throw new ExceptionErroreInserimento();
            }
        }

        //Modifica Fornitore
        public Edit Modifica(Fornitore Fornitori)
        {
            try
            {
                string sql = @" UPDATE Fornitori SET 
                                    Nome=@Nome,Cognome=@Cognome,Indirizzo=@Indirizzo,
                                    Citta=@Citta,Cap=@Cap,Telefono=@Telefono,
                                    Cellulare=@Cellulare,Fax=@Fax,Email=@Email,
                                    PartitaIva=@PartitaIva,CodiceFiscale=@CodiceFiscale,
                                    RagioneSociale=@RagioneSociale,SedeLegale=@SedeLegale,
                                    SedeAmministrativa=@SedeAmministrativa,Annotazioni=@Annotazioni
                                WHERE Id=@Id";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Nome", Fornitori.Nome);
                cmd.Parameters.AddWithValue("@Cognome", Fornitori.Cognome);
                cmd.Parameters.AddWithValue("@Indirizzo", Fornitori.Indirizzo);
                cmd.Parameters.AddWithValue("@Citta", Fornitori.Citta);
                cmd.Parameters.AddWithValue("@Cap", Fornitori.Cap);
                cmd.Parameters.AddWithValue("@Telefono", Fornitori.Telefono);
                cmd.Parameters.AddWithValue("@Cellulare", Fornitori.Cellulare);
                cmd.Parameters.AddWithValue("@Fax", Fornitori.Fax);
                cmd.Parameters.AddWithValue("@Email", Fornitori.Email);
                cmd.Parameters.AddWithValue("@PartitaIva", Fornitori.PartitaIva);
                cmd.Parameters.AddWithValue("@CodiceFiscale", Fornitori.CodiceFiscale);
                cmd.Parameters.AddWithValue("@RagioneSociale", Fornitori.RagioneSociale);
                cmd.Parameters.AddWithValue("@SedeLegale", Fornitori.SedeLegale);
                cmd.Parameters.AddWithValue("@SedeAmministrativa", Fornitori.SedeAmministrativa);
                if (Fornitori.Annotazioni != null)
                {
                    cmd.Parameters.AddWithValue("@Annotazioni", Fornitori.Annotazioni);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@Annotazioni", "");
                }
                cmd.Parameters.AddWithValue("@Id", (Guid)Fornitori.Id);
                cmd.ExecuteNonQuery();

                return Edit.Successo;
            }
            catch 
            {

               throw new ExceptionErroreModifica();
            }
        }

        //Elimina Fornitore
        public Delete Elimina(Fornitore Fornitori)
        {
            try
            {
                string sql = @"DELETE FROM Fornitori 
                                WHERE Id=@Id";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Fornitori.Id);
                cmd.ExecuteNonQuery();

                return Delete.Successo;
            }
            catch 
            {
                
                throw new ExceptionErroreCancellazione();
            }

        }

        //Selezione Fornitore
        public List<Fornitore> Seleziona()
        {

            string sql = @"SELECT * FROM Fornitori";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Fornitore> FornitoriRitorno = new List<Fornitore>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    Fornitore FornitoreRitorno = new Fornitore();
                    FornitoreRitorno.Id = (Guid)item["Id"];
                    FornitoreRitorno.Nome = item["Nome"].ToString();
                    FornitoreRitorno.Cognome = item["Cognome"].ToString();
                    FornitoreRitorno.Indirizzo = item["Indirizzo"].ToString();
                    FornitoreRitorno.Citta = item["Citta"].ToString();
                    FornitoreRitorno.Cap = item["Cap"].ToString();
                    FornitoreRitorno.Telefono = item["Telefono"].ToString();
                    FornitoreRitorno.Cellulare = item["Cellulare"].ToString();
                    FornitoreRitorno.Fax = item["Fax"].ToString();
                    FornitoreRitorno.Email = item["Email"].ToString();
                    FornitoreRitorno.PartitaIva = item["PartitaIva"].ToString();
                    FornitoreRitorno.CodiceFiscale = item["CodiceFiscale"].ToString();
                    FornitoreRitorno.RagioneSociale = item["RagioneSociale"].ToString();
                    FornitoreRitorno.SedeAmministrativa = item["SedeAmministrativa"].ToString();
                    FornitoreRitorno.SedeLegale = item["SedeLegale"].ToString();
                    FornitoreRitorno.Annotazioni = item["Annotazioni"].ToString();
                    FornitoriRitorno.Add(FornitoreRitorno);
                }
            }
                    
            return FornitoriRitorno;
        }

        //Seleziona fornitori per id
        public Fornitore Seleziona(Fornitore Fornitore)
        {
            string sql = @"SELECT * FROM Fornitori
                           WHERE Fornitori.Id='" + Fornitore.Id + "'";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Fornitore> FornitoriRitorno = new List<Fornitore>();
            if (dt.Rows.Count > 0)
            {
                    Fornitore FornitoreRitorno = new Fornitore();
                    FornitoreRitorno.Id = (Guid)dt.Rows[0]["Id"];
                    FornitoreRitorno.Nome = dt.Rows[0]["Nome"].ToString();
                    FornitoreRitorno.Cognome = dt.Rows[0]["Cognome"].ToString();
                    FornitoreRitorno.Indirizzo = dt.Rows[0]["Indirizzo"].ToString();
                    FornitoreRitorno.Citta = dt.Rows[0]["Citta"].ToString();
                    FornitoreRitorno.Cap = dt.Rows[0]["Cap"].ToString();
                    FornitoreRitorno.Telefono = dt.Rows[0]["Telefono"].ToString();
                    FornitoreRitorno.Cellulare = dt.Rows[0]["Cellulare"].ToString();
                    FornitoreRitorno.Fax = dt.Rows[0]["Fax"].ToString();
                    FornitoreRitorno.Email = dt.Rows[0]["Email"].ToString();
                    FornitoreRitorno.PartitaIva = dt.Rows[0]["PartitaIva"].ToString();
                    FornitoreRitorno.CodiceFiscale = dt.Rows[0]["CodiceFiscale"].ToString();
                    FornitoreRitorno.RagioneSociale = dt.Rows[0]["RagioneSociale"].ToString();
                    FornitoreRitorno.SedeAmministrativa = dt.Rows[0]["SedeAmministrativa"].ToString();
                    FornitoreRitorno.SedeLegale = dt.Rows[0]["SedeLegale"].ToString();
                    FornitoreRitorno.Annotazioni = dt.Rows[0]["Annotazioni"].ToString();
                    FornitoriRitorno.Add(FornitoreRitorno);
                    return FornitoreRitorno;
            }
            return null;
        }

        //Seleziona fornitori per id
        public Fornitore Seleziona(Guid IdFornitore)
        {
            string sql = @"SELECT * FROM Fornitori
                           WHERE Fornitori.Id='" + IdFornitore + "'";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                Fornitore FornitoreRitorno = new Fornitore();
                FornitoreRitorno.Id = (Guid)dt.Rows[0]["Id"];
                FornitoreRitorno.Nome = dt.Rows[0]["Nome"].ToString();
                FornitoreRitorno.Cognome = dt.Rows[0]["Cognome"].ToString();
                FornitoreRitorno.Indirizzo = dt.Rows[0]["Indirizzo"].ToString();
                FornitoreRitorno.Citta = dt.Rows[0]["Citta"].ToString();
                FornitoreRitorno.Cap = dt.Rows[0]["Cap"].ToString();
                FornitoreRitorno.Telefono = dt.Rows[0]["Telefono"].ToString();
                FornitoreRitorno.Cellulare = dt.Rows[0]["Cellulare"].ToString();
                FornitoreRitorno.Fax = dt.Rows[0]["Fax"].ToString();
                FornitoreRitorno.Email = dt.Rows[0]["Email"].ToString();
                FornitoreRitorno.PartitaIva = dt.Rows[0]["PartitaIva"].ToString();
                FornitoreRitorno.CodiceFiscale = dt.Rows[0]["CodiceFiscale"].ToString();
                FornitoreRitorno.RagioneSociale = dt.Rows[0]["RagioneSociale"].ToString();
                FornitoreRitorno.SedeAmministrativa = dt.Rows[0]["SedeAmministrativa"].ToString();
                FornitoreRitorno.SedeLegale = dt.Rows[0]["SedeLegale"].ToString();
                FornitoreRitorno.Annotazioni = dt.Rows[0]["Annotazioni"].ToString();
                return FornitoreRitorno;
            }
            return null;
        }

        //Seleziona fornitori per valore
        public List<Fornitore> Seleziona(string Valore)
        {
            string sql = @"SELECT * FROM Fornitori
                          WHERE Fornitori.RagioneSociale LIKE '%" + Valore.Replace("'", "''") + "%'";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Fornitore> FornitoriRitorno = new List<Fornitore>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    Fornitore FornitoreRitorno = new Fornitore();
                    FornitoreRitorno.Id = (Guid)item["Id"];
                    FornitoreRitorno.Nome = item["Nome"].ToString();
                    FornitoreRitorno.Cognome = item["Cognome"].ToString();
                    FornitoreRitorno.Indirizzo = item["Indirizzo"].ToString();
                    FornitoreRitorno.Citta = item["Citta"].ToString();
                    FornitoreRitorno.Cap = item["Cap"].ToString();
                    FornitoreRitorno.Telefono = item["Telefono"].ToString();
                    FornitoreRitorno.Cellulare = item["Cellulare"].ToString();
                    FornitoreRitorno.Fax = item["Fax"].ToString();
                    FornitoreRitorno.Email = item["Email"].ToString();
                    FornitoreRitorno.PartitaIva = item["PartitaIva"].ToString();
                    FornitoreRitorno.CodiceFiscale = item["CodiceFiscale"].ToString();
                    FornitoreRitorno.RagioneSociale = item["RagioneSociale"].ToString();
                    FornitoreRitorno.SedeAmministrativa = item["SedeAmministrativa"].ToString();
                    FornitoreRitorno.SedeLegale = item["SedeLegale"].ToString();
                    FornitoreRitorno.Annotazioni = item["Annotazioni"].ToString();
                    FornitoriRitorno.Add(FornitoreRitorno);

                    FornitoriRitorno.Add(FornitoreRitorno);
                }
            }
            return FornitoriRitorno;
        }

        #endregion


    }
}
